/*
 * Created: Author: Aléx Carvalho / Date: May 26, 2015
 * 
 * Changed: $Author: ac280593@gmail.com $ / $Date: 2015-06-11 01:28:43 -0300 (Thu, 11 Jun 2015) $
 */
package com.cpm.wrapper;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public final class MapList<KEY, VALUE> {

    private final Map<KEY, List<VALUE>> mapList = new LinkedHashMap<>();

    public MapList() {
    }

    public final void putValueInKey(KEY key, VALUE value) {
        SolidObjects.notNullValues(key, value);
        getValuesByKey(key).add(value);
    }
//
//    public final void putValuesInKey(KEY key, List<VALUE> values) {
//        SolidObjects.notNullValues(key, values);
//        getValuesByKey(key).addAll(values);
//    }
//
//    public VALUE getValue(int keyIndex, int valueIndex) {
//        if (this.mapList.keySet().size() > keyIndex) {
//            List<VALUE> values = this.getValuesByKey(this.getKeyByIndex(keyIndex));
//            if (values.size() > valueIndex) {
//                return values.get(valueIndex);
//            }
//        }
//        return null;
//    }
//
    public final List<VALUE> getValuesByKey(KEY key) {
        List<VALUE> values = this.mapList.get(key);
        if (values == null) {
            this.mapList.put(key, values = new ArrayList<>(0));
        }

        return values;
    }

//    public List<VALUE> getAllValues() {
//        List<VALUE> values = new ArrayList<>();
//        this.mapList.keySet().stream().forEach((key) -> {
//            values.addAll(this.getValuesByKey(key));
//        });
//        return values;
//    }
//
//
//    public final Boolean existsValuesByKey(KEY key) {
//        return !getValuesByKey(key).isEmpty();
//    }
//
//    public final Integer countValuesByKey(KEY key) {
//        return getValuesByKey(key).size();
//    }
//
    public final Integer size() {
        return mapList.size();
    }
//
//    public final void removeValuesByKey(KEY key) {
//        if (key != null) {
//            mapList.remove(key);
//        }
//    }
//
//    public KEY getKeyByIndex(int keyIndex) {
//        if (mapList.keySet().size() > keyIndex) {
//            return (KEY) mapList.keySet().toArray()[keyIndex];
//        }
//        return null;
//    }
}
